package fra;

public class Vector{
	Matrix matrix;//矩阵
	/**构造函数*******************************************/
	private Vector(){matrix=new Matrix("Vector");}
	private Vector(double ... arrs){
		matrix=new Matrix("Vector",1,arrs.length);
		for (int i = 0; i < arrs.length; i++) {
			matrix.set(i+1, arrs[i]);
		}
	}	
	/**静态功能*****************************************/
	/**
	 * 生成向量
	 * @param start 开始值
	 * @param step 步长
	 * @param end 结束值
	 * @return
	 */
	public static Vector createVector(double start,double step,double end){
		if(step==0){
			throw new RuntimeException("步长不能为0");
		}
		step=Math.abs(step);
		
		int len=(int)Math.floor(Math.abs(end-start)/step);		
		double arr[]=new double[len];
		int i=0;
		
		if(start<=end){
			do{
				arr[i++]=start;
				start+=step;
			}while(start<end);
			return new Vector(arr); 
		}
		do{
			arr[i++]=start;
			start-=step;
		}while(start>end);

		return new Vector(arr); 
	}
	/**
	 * 生成向量 步长为1
	 * @param start
	 * @param end
	 * @return
	 */
	public static Vector createVector(double start,double end){
		return createVector(start,1,end);
	}
	/**重载*****************************************/
	@Override
	public String toString() {
		return matrix.toString();
	}
	@Override
	public boolean equals(Object obj) {
		if(obj==null)return false;
	    if(!(obj instanceof Vector))return false;
	    Vector v=(Vector)obj;
		return matrix.equals(v.matrix);
	}
	/**功能*****************************************/
	/**
	 * 获取数组里面的值
	 * @param i
	 * @return
	 */
	public double get(int index){
		index=(index+size())%size();
		return (double)matrix.get(index);
	}
	/**
	 * 获取向量里面所有的值
	 * @return
	 */
	public double[] get(){
		double arr[]=new double[matrix.getCol()];
		Object objArr[]=matrix.get();
		for (int i = 0; i < objArr.length; i++) {
			arr[i]=(double)objArr[i];
		}
		return arr;
	}
	/**属性*****************************************/
	public Matrix getMatrix() {
		return matrix.clone();
	}
	/**
	 * 获取向量的长度
	 * @return
	 */
	public int size(){
		return matrix.getCol();
	}
	
	public static void main(String[] args) {
		Vector v=Vector.createVector(0,1,3);
		System.out.println(v.get(2));
	}
}
